﻿//// Original author contact info: Owen Emlen (owene_1998@yahoo.com)
//// Note: other individuals may also have contributed to this code
//// Project hosted on CodePlex.com as of 1/10/2009 at http://wpfimageviewer.codeplex.com
//using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.Drawing;
//using System.Drawing.Drawing2D;
//using System.Drawing.Imaging;
//using System.Linq;
//using System.Windows;
//using BrainTechLLC;
//using BrainTechLLC.ImageOperatorsNonAForgeDependent;
//using ImageAppDataModels;
//using BrainTechLLC.WPF;

//namespace ImageAppViewModels
//{
//    public partial class SettingsViewModel : BaseNotifyPropertyChangedUI, INotifyPropertyChanged
//    {
//        protected Settings _settings;

//        public SettingsViewModel(Settings settings)
//        {
//            if (settings == null)
//            {
//                settings = new Settings();
//            }

//            _settings = settings;
//            _settings.PropertyChanged += new PropertyChangedEventHandler(_settings_PropertyChanged);
//        }

//        void _settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
//        {
//            OnPropertyChanged(e.PropertyName);
//        }

//        public string FileNameFilter
//        {
//            get { return _settings.FileNameFilter; }
//            set { _settings.FileNameFilter = value; }
//        }

//        public void SaveSettings(string path)
//        {
//            _settings.SaveSettings(path);
//        }

//        public int ImageSourcesToTossWhenMaxReached
//        {
//            get { return _settings.ImageSourcesToTossWhenMaxReached; }
//            set { _settings.ImageSourcesToTossWhenMaxReached = value; }
//        }

//        // TODO - wire up
//        public bool TrackLocationInThumbView
//        {
//            get { return _settings.TrackLocationInThumbView; }
//            set { _settings.TrackLocationInThumbView = value; }
//        }

//        public int MaxImageSourcesInMemory
//        {
//            get { return _settings.MaxImageSourcesInMemory; }
//            set { _settings.MaxImageSourcesInMemory = value; }
//        }

//        public int MaxThumbnailControlsInMemory
//        {
//            get { return _settings.MaxThumbnailControlsInMemory; }
//            set { _settings.MaxThumbnailControlsInMemory = value; }
//        }

//        public bool ConfirmMultiDelete
//        {
//            get { return _settings.ConfirmMultiDelete; }
//            set { _settings.ConfirmMultiDelete = value; }
//        }

//        public bool ConfirmDelete
//        {
//            get { return _settings.ConfirmDelete; }
//            set { _settings.ConfirmDelete = value; }
//        }

//        public int MaxTransformedBitmapsInMemory
//        {
//            get { return _settings.MaxTransformedBitmapsInMemory; }
//            set { _settings.MaxTransformedBitmapsInMemory = value; }
//        }

//        public int TransformedToTossWhenMaxReached
//        {
//            get { return _settings.TransformedToTossWhenMaxReached; }
//            set { _settings.TransformedToTossWhenMaxReached = value; }
//        }

//        public bool FullViewerVisible
//        {
//            get { return _settings.FullViewerVisible; }
//            set { _settings.FullViewerVisible = value; }
//        }

//        public bool FilterExplorerVisible
//        {
//            get { return _settings.FilterExplorerVisible; }
//            set { _settings.FilterExplorerVisible = value; }

//        }

//        public bool FolderExplorerVisible
//        {
//            get { return _settings.FolderExplorerVisible; }
//            set { _settings.FolderExplorerVisible = value; }
//        }

//        public bool ThumbnailsVisible
//        {
//            get { return _settings.ThumbnailsVisible; }
//            set { _settings.ThumbnailsVisible = value; }
//        }

//        public bool DirectoriesVisible
//        {
//            get { return _settings.DirectoriesVisible; }
//            set { _settings.DirectoriesVisible = value; }
//        }

//        public int FileBytesToTossWhenMaxReached
//        {
//            get { return _settings.FileBytesToTossWhenMaxReached; }
//            set { _settings.FileBytesToTossWhenMaxReached = value; }
//        }

//        public int MaxFileBytesInMemory
//        {
//            get { return _settings.MaxFileBytesInMemory; }
//            set { _settings.MaxFileBytesInMemory = value; }
//        }

//        public bool ShowThumbCommandBar
//        {
//            get { return _settings.ShowThumbCommandBar; }
//            set { _settings.ShowThumbCommandBar = value; }
//        }

//        public int ResizeJpegQuality
//        {
//            get { return _settings.ResizeJpegQuality; }
//            set { _settings.ResizeJpegQuality = value; }
//        }

//        public bool ThumbShowDimensions
//        {
//            get { return _settings.ThumbShowDimensions; }
//            set { _settings.ThumbShowDimensions = value; }
//        }

//        public bool ThumbShowFullPath
//        {
//            get { return _settings.ThumbShowFullPath; }
//            set { _settings.ThumbShowFullPath = value; }
//        }

//        public bool ThumbShowFileDate
//        {
//            get { return _settings.ThumbShowFileDate; }
//            set { _settings.ThumbShowFileDate = value; }
//        }

//        public bool ThumbShowFileSize
//        {
//            get { return _settings.ThumbShowFileSize; }
//            set { _settings.ThumbShowFileSize = value; }
//        }

//        public bool ThumbShowFileName
//        {
//            get { return _settings.ThumbShowFileName; }
//            set { _settings.ThumbShowFileName = value; }
//        }

//        public bool ShowFullViewerDetails1
//        {
//            get { return _settings.ShowFullViewerDetails1; }
//            set { _settings.ShowFullViewerDetails1 = value; }
//        }

//        public int SimilarityCacheMax
//        {
//            get { return _settings.SimilarityCacheMax; }
//            set { _settings.SimilarityCacheMax = value; }
//        }

//        public int MaxConcurrentBlurCalcs
//        {
//            get { return _settings.MaxConcurrentBlurCalcs; }
//            set { _settings.MaxConcurrentBlurCalcs = value; }
//        }

//        public int SimilarityCacheToRemove
//        {
//            get { return _settings.SimilarityCacheToRemove; }
//            set { _settings.SimilarityCacheToRemove = value; }
//        }

//        public int ResizeWidth
//        {
//            get { return _settings.ResizeWidth; }
//            set { _settings.ResizeWidth = value; }
//        }

//        public int ResizeHeight
//        {
//            get { return _settings.ResizeHeight; }
//            set { _settings.ResizeHeight = value; }
//        }

//        public string ResizedFileName
//        {
//            get { return _settings.ResizedFileName; }
//            set { _settings.ResizedFileName = value; }
//        }

//        public bool ShowFullViewerDetails2
//        {
//            get { return _settings.ShowFullViewerDetails2; }
//            set { _settings.ShowFullViewerDetails2 = value; }
//        }

//        public double SimilarityCutoff
//        {
//            get { return _settings.SimilarityCutoff; }
//            set { _settings.SimilarityCutoff = value; }
//        }

//        public InternalRenderingMethod InternalRendering
//        {
//            get { return _settings.InternalRendering; }
//            set { _settings.InternalRendering = value; }
//        }

//        public List<InternalRenderingMethod> AllInternalRenderingMethods
//        {
//            get
//            {
//                List<InternalRenderingMethod> results = new List<InternalRenderingMethod>();

//                var vals = Enum.GetValues(typeof(InternalRenderingMethod)).Cast<InternalRenderingMethod>();

//                return vals.ToList();
//            }
//        }

//        public bool ShowDebugOnThumbs
//        {
//            get { return _settings.ShowDebugOnThumbs; }
//            set { _settings.ShowDebugOnThumbs = value; }
//        }

//        public double CompareMultipleHeight
//        {
//            get { return _settings.CompareMultipleHeight; }
//            set { _settings.CompareMultipleHeight = value; }
//        }

//        public double CompareMultipleWidth
//        {
//            get { return _settings.CompareMultipleWidth; }
//            set { _settings.CompareMultipleWidth = value; }
//        }

//        public int SimilarityScaleWidth
//        {
//            get { return _settings.SimilarityScaleWidth; }
//            set { _settings.SimilarityScaleWidth = value; }
//        }

//        public int SimilarityScaleHeight
//        {
//            get { return _settings.SimilarityScaleHeight; }
//            set { _settings.SimilarityScaleHeight = value; }
//        }

//        public bool ThumbnailDebugMode
//        {
//            get { return DebugSettings.DebugSettingsInstance.ShowDebug; }
//            set
//            {
//                if (DebugSettings.DebugSettingsInstance.ShowDebug != value)
//                {
//                    DebugSettings.DebugSettingsInstance.ShowDebug = value;
//                    OnPropertyChanged("ThumbnailDebugMode");
//                }
//            }
//        }

//        public bool EvenThumbWidths
//        {
//            get { return _settings.EvenThumbWidths; }
//            set { _settings.EvenThumbWidths = value; }
//        }

//        public bool ShowImageInfoBelowThumbs
//        {
//            get { return _settings.ShowImageInfoBelowThumbs; }
//            set { _settings.ShowImageInfoBelowThumbs = value; }
//        }

//        public bool UseHSLRounding
//        {
//            get { return _settings.UseHSLRounding; }
//            set { _settings.UseHSLRounding = value; }
//        }

//        public PixelFormat StandardColorPixelFormat
//        {
//            get { return _settings.StandardColorPixelFormat; }
//            set { _settings.StandardColorPixelFormat = value; }
//        }

//        public int ThumbPreloadThreads
//        {
//            get { return _settings.ThumbPreloadThreads; }
//            set { _settings.ThumbPreloadThreads = value; }
//        }

//        public int DecimalDigitsHSLLuminanceRounding
//        {
//            get { return _settings.DecimalDigitsHSLLuminanceRounding; }
//            set { _settings.DecimalDigitsHSLLuminanceRounding = value; }
//        }

//        public int DecimalDigitsHSLSaturationRounding
//        {
//            get { return _settings.DecimalDigitsHSLSaturationRounding; }
//            set { _settings.DecimalDigitsHSLSaturationRounding = value; }
//        }

//        public int ItemsToTossWhenMaxReached
//        {
//            get { return _settings.ItemsToTossWhenMaxReached; }
//            set { _settings.ItemsToTossWhenMaxReached = value; }
//        }

//        public int MaxBitmapsInMemory
//        {
//            get { return _settings.MaxBitmapsInMemory; }
//            set { _settings.MaxBitmapsInMemory = value; }
//        }

//        public long UnusedBytesBeforeCleanup
//        {
//            get { return _settings.UnusedBytesBeforeCleanup; }
//            set { _settings.UnusedBytesBeforeCleanup = value; }
//        }

//        public bool HideCommandBar
//        {
//            get { return _settings.HideCommandBar; }
//            set { _settings.HideCommandBar = value; }
//        }

//        public bool HideFilters
//        {
//            get { return _settings.HideFilters; }
//            set { _settings.HideFilters = value; }
//        }

//        public double MainGridRow1Height
//        {
//            get { return _settings.MainGridRow1Height; }
//            set { _settings.MainGridRow1Height = value; }
//        }

//        public static Settings LoadSettings(string path)
//        {
//            return Settings.LoadSettings(path);
//        }

//        public List<InterpolationMode> AllInterpolations
//        {
//            get
//            {
//                List<InterpolationMode> results = new List<InterpolationMode>();
//                results.Add(InterpolationMode.Default);
//                results.Add(InterpolationMode.Bilinear);
//                results.Add(InterpolationMode.Bicubic);
//                results.Add(InterpolationMode.NearestNeighbor);
//                results.Add(InterpolationMode.Low);
//                results.Add(InterpolationMode.High);
//                results.Add(InterpolationMode.HighQualityBilinear);
//                results.Add(InterpolationMode.HighQualityBicubic);
//                return results;
//            }
//        }

//        public List<PixelFormat> AllStandardColorPixelFormats
//        {
//            get
//            {
//                List<PixelFormat> results = new List<PixelFormat>();
//                results.Add(PixelFormat.Format24bppRgb);
//                results.Add(PixelFormat.Format32bppArgb);
//                results.Add(PixelFormat.Format32bppPArgb);
//                results.Add(PixelFormat.Format32bppRgb);
//                results.Add(PixelFormat.Format48bppRgb);
//                results.Add(PixelFormat.Format64bppArgb);
//                results.Add(PixelFormat.Format64bppPArgb);
//                results.Add(PixelFormat.Format16bppRgb555);
//                results.Add(PixelFormat.Format16bppRgb565);
//                results.Add(PixelFormat.Format16bppArgb1555);
//                return results;
//            }
//        }
//        public List<SmoothingMode> AllSmoothingModes
//        {
//            get
//            {
//                List<SmoothingMode> results = new List<SmoothingMode>();
//                results.Add(SmoothingMode.None);
//                results.Add(SmoothingMode.Default);
//                results.Add(SmoothingMode.AntiAlias);
//                results.Add(SmoothingMode.HighQuality);
//                results.Add(SmoothingMode.HighSpeed);
//                return results;
//            }
//        }

//        public int MaxThumbsInMemory
//        {
//            get { return _settings.MaxThumbsInMemory; }
//            set { _settings.MaxThumbsInMemory = value; }
//        }

//        public int MaxFilesInMemory
//        {
//            get { return _settings.MaxFilesInMemory; }
//            set { _settings.MaxFilesInMemory = value; }
//        }

//        public double MinScaleWidth
//        {
//            get { return _settings.MinScaleWidth; }
//            set { _settings.MinScaleWidth = value; }
//        }

//        public double MinScaleHeight
//        {
//            get { return _settings.MinScaleHeight; }
//            set { _settings.MinScaleHeight = value; }
//        }
//        public InterpolationMode InterpolationMode
//        {
//            get { return _settings.InterpolationMode; }
//            set { _settings.InterpolationMode = value; }
//        }
//        public SmoothingMode SmoothingMode
//        {
//            get { return _settings.SmoothingMode; }
//            set { _settings.SmoothingMode = value; }
//        }
//        public double BlurCutoff
//        {
//            get { return _settings.BlurCutoff; }
//            set { _settings.BlurCutoff = value; }
//        }
//        public double ScaleFactor
//        {
//            get { return _settings.ScaleFactor; }
//            set { _settings.ScaleFactor = value; }
//        }
//        public double FullLeft
//        {
//            get { return _settings.FullLeft; }
//            set { _settings.FullLeft = value; }
//        }
//        public double FullTop
//        {
//            get { return _settings.FullTop; }
//            set { _settings.FullTop = value; }
//        }
//        public double FullWidth
//        {
//            get { return _settings.FullWidth; }
//            set { _settings.FullWidth = value; }
//        }

//        public double FullHeight
//        {
//            get { return _settings.FullHeight; }
//            set { _settings.FullHeight = value; }
//        }

//        public WindowState FullWindowState
//        {
//            get { return _settings.FullWindowState; }
//            set { _settings.FullWindowState = value; }
//        }

//        public WindowState MainWindowState
//        {
//            get { return _settings.MainWindowState; }
//            set { _settings.MainWindowState = value; }
//        }

//        public string CurrentFilterCollectionName
//        {
//            get { return _settings.CurrentFilterCollectionName; }
//            set { _settings.CurrentFilterCollectionName = value; }
//        }

//        public double MainFormRow0Height
//        {
//            get { return _settings.MainFormRow0Height; }
//            set { _settings.MainFormRow0Height = value; }
//        }

//        public double MainFormRow2Height
//        {
//            get { return _settings.MainFormRow2Height; }
//            set { _settings.MainFormRow2Height = value; }
//        }

//        public double MainFormRow3Height
//        {
//            get { return _settings.MainFormRow3Height; }
//            set { _settings.MainFormRow3Height = value; }
//        }

//        public double MainFormRow4Height
//        {
//            get { return _settings.MainFormRow4Height; }
//            set { _settings.MainFormRow4Height = value; }
//        }

//        public bool ViewerIsTopmost
//        {
//            get { return _settings.ViewerIsTopmost; }
//            set { _settings.ViewerIsTopmost = value; }
//        }

//        public List<string> AllSortByOptions
//        {
//            get
//            {
//                List<string> results = new List<string>();

//                results.Add(string.Empty);
//                results.Add("FileNameOnly");
//                results.Add("FileName");
//                results.Add("FileSize");
//                results.Add("FileDateTime");
//                results.Add("WidthHeight");

//                return results;
//            }
//        }

//        public string SortBy
//        {
//            get { return _settings.SortBy; }
//            set { _settings.SortBy = value; }
//        }

//        public bool SortDescending
//        {
//            get { return _settings.SortDescending; }
//            set { _settings.SortDescending = value; }
//        }

//        public string SortBy2
//        {
//            get { return _settings.SortBy2; }
//            set { _settings.SortBy2 = value; }
//        }

//        public bool SortDescending2
//        {
//            get { return _settings.SortDescending2; }
//            set { _settings.SortDescending2 = value; }
//        }

//        public bool HighQualityThumbs
//        {
//            get { return _settings.HighQualityThumbs; }
//            set { _settings.HighQualityThumbs = value; }
//        }

//        public int MaxThumbnailImageSources
//        {
//            get { return _settings.MaxThumbnailImageSources; }
//            set { _settings.MaxThumbnailImageSources = value; }
//        }

//        public Rectangle Window1Size
//        {
//            get { return _settings.Window1Size; }
//            set { _settings.Window1Size = value; }
//        }

//        public double ThumbWidth
//        {
//            get { return _settings.ThumbWidth; }
//            set { _settings.ThumbWidth = value; }
//        }

//        public double ThumbHeight
//        {
//            get { return _settings.ThumbHeight; }
//            set { _settings.ThumbHeight = value; }
//        }

//        public bool WantFilterThumbnails
//        {
//            get { return _settings.WantFilterThumbnails; }
//            set { _settings.WantFilterThumbnails = value; }
//        }

//        public void ApplySettings(Window mainWindow)
//        {
//            Settings.Values.BlurCutoff = BlurCutoff;

//            if (MaxBitmapsInMemory < 4)
//                MaxBitmapsInMemory = 4;

//            if (ItemsToTossWhenMaxReached > MaxBitmapsInMemory || ItemsToTossWhenMaxReached < 1)
//                ItemsToTossWhenMaxReached = 1;

//            if (MaxImageSourcesInMemory < 4)
//                MaxImageSourcesInMemory = 4;

//            if (ImageSourcesToTossWhenMaxReached > MaxImageSourcesInMemory || ImageSourcesToTossWhenMaxReached < 1)
//                ImageSourcesToTossWhenMaxReached = 1;

//            if (MaxFileBytesInMemory < 4)
//                MaxFileBytesInMemory = 4;

//            if (FileBytesToTossWhenMaxReached > MaxFileBytesInMemory || FileBytesToTossWhenMaxReached < 1)
//                FileBytesToTossWhenMaxReached = 1;

//            RecentlyUsedFileImages.RecentlyUsedBitmaps.MaxItems = MaxBitmapsInMemory;
//            RecentlyUsedFileImages.RecentlyUsedBitmaps.ItemsToTossWhenMaxReached = ItemsToTossWhenMaxReached;
//            RecentlyUsedFileImages.RecentlyUsedImageSources.MaxItems = MaxImageSourcesInMemory;
//            RecentlyUsedFileImages.RecentlyUsedImageSources.ItemsToTossWhenMaxReached = ImageSourcesToTossWhenMaxReached;
//            RecentlyUsedFileImages.RecentlyUsedFileBytes.MaxItems = MaxFileBytesInMemory;
//            RecentlyUsedFileImages.RecentlyUsedFileBytes.ItemsToTossWhenMaxReached = FileBytesToTossWhenMaxReached;

//            if (Window1Size != null)
//            {
//                mainWindow.Left = Window1Size.Left;
//                mainWindow.Top = Window1Size.Top;
//                mainWindow.Width = Window1Size.Width;
//                mainWindow.Height = Window1Size.Height;
//            }

//            if (mainWindow.WindowState != MainWindowState)
//            {
//                mainWindow.WindowState = MainWindowState;
//            }
//        }

//        public void ReadSettings(Window mainWindow)
//        {
//            Window1Size = new Rectangle((int)mainWindow.Left, (int)mainWindow.Top, (int)mainWindow.ActualWidth, (int)mainWindow.ActualHeight);
//            MainWindowState = mainWindow.WindowState;
//        }

//        public void SetThumbWidthAndHeight(double w, double h)
//        {
//            _settings.SetThumbWidthAndHeight(w, h);
//        }
//    }
//}
